今天開始我會花幾天的時間來一步一步帶領各位理解最佳化問題中的啟發式演算法,前一天曾說過最佳化演算法的分類,在模型最佳化中我們通常會使用啟發式演算法來求出最佳模型的超參數組合。今天就來針對啟發式演算法做更深入的了解吧!
啟發式演算法基本上也可以算在機器學習中的一個子領域,但因為各種不同的演算法所以基本上啟發式演算法並沒有一個統一的理論,更偏向於一種技巧。用這個小技巧讓模型的性能獲得近一步的提升也是一個蠻重要的概念。
啟發式演算法是希望能在有限時間與有限運算成本的前提下尋找出最佳解的一項技術,它並不會將所有的解組合帶入計算,而是透過一些「隨機」與「整合經驗」的方式在短時間內也可以找出比較優秀的結果。
下面介紹的演算法我會盡量附上原始論文網址,但有些論文需要購買才能觀看全文QQ。若不想花錢的話也可以Google學術搜尋看看有沒有公開的文章可以參考~
目前有許多啟發式演算法發跡於一些學者對生活環境的觀察(觀察到能想出這些方法真的很厲害),他們觀察一些動物、植物等生物行為,並從中獲得啟發而發想出的方法就是基於生物的啟發式演算法,目前最基本的演算法就是粒子群演算法(Particle Swarm Optimization, PSO)了。不過除此之外也有許多演算法被提出:
這些演算法求解的方式都有不同,有時也會因為這些差異導致最終結果的不同。這些演算法也都是學者根據他們觀察到的自然現象,那些動植物努力讓自己能夠最佳化生存下去的方式作為基礎,進一步開發出的演算法。
隨著歷史的發展,生物在演化時也會有一些行為,使生物的後代更能夠適應環境的生活。而受到這些行為的啟發所提出的最佳化演算法就是基於演化行為的演算法,目前這分類的演算法較少,不過最經典的演算法就是基因演算法(Genetic Algorithm, GA)了,做為跟粒子群演算法一樣基礎的演算法,基因演算法原理也很簡單。至於其他基於演化行為也發展出不同的演算法。
一樣隨著歷史的發展,不只生物在進化,人類也都在尋找能夠生活變得更舒適的方式,而有些學者受到人類發展方式策略的啟發,而將之數學化研發出的演算法的方式就是基於人類行為的演算法,目前也有許多這類型的演算法。接下來我來介紹幾個基於人類行為的演算法,這些演算法我似乎沒有找到正統的中文翻譯,故只附上原文orz。
這類型的演算法可能比較少見,有些演算法會基於數學運算元的行為(這也能受到啟發?!)等數學與物理的現象而受到啟發而發展出的演算法就是基於數理的演算法。目前部分的演算法如下所示。
今天粗略的介紹了許多演算法以及這些演算法的基礎、受到的啟發等,基本上啟發式演算法隨著發展已經有非常多的算法可用。要全部介紹應該是不太可能的,所以接下來我會挑選幾個基礎且常用的演算法來介紹。在這之前我想先來帶各位介紹幾種最佳化的測試函數介紹,若沒有問題的假設與最佳化的目標,那討論最佳化演算法以及實務運用應該也是空談XD
在實務運用上可以多方嘗試不同演算法並挑選出效果較好的演算法來最佳化,即使問題類似但有時候不同演算法表現就會有差。所以若嚴謹一點則需要多方比較不同演算法才是較穩妥的做法。